package com.util.common.sql;

import java.util.Map;

public interface SQLBlock {
	
	/**
	 * 设置表名
	 * @param tableName
	 * @return
	 */
	public void setTableName(String tableName);
	
	/**
	 * 将map中的key作为数据库表的关键字，map中的value作为关键字的值，
	 * 来组合生成where语句。多个条件之间用map中termsLink关键字的值作为连接。
	 * 如果为设置termsLink的值，则将以默认值and作为连接。
	 * 如果map的value是map类型，则会根据value中map的key，value，termsLink
	 * 三个值来组合查询条件。
	 * 例如'map.getKey() valueMap.get("key") valueMap.get("value") valueMap.get("termsLink")'
	 * @param map
	 * @return 带where字符串的sql条件语句。
	 * 如果map为空或者无值，将返回""字符串
	 */
	public String mergeWhere(Map<String,Object> map);
	
	/**
	 * 组合成where条件语句
	 * searchId为字符串,则searchValue需加''
	 * @param searchId
	 * @param searchValue
	 * @return
	 */
	public String mergeWhere(String searchId, String searchValue);
	
	/**
	 * 组合多条件的where语句 <br />
	 * 例searchValue=user1,user2...<br />
	 * 则生成 where key=user1 andOr key=user2 ...<br />
	 * 注意：searchValue 引号问题<br />
	 * 当searchValue为null或者为空值时返回""
	 * @param searchId
	 * @param searchValue
	 * @param andOr
	 * @return
	 */
	public String mergeWhere(String searchId,String searchValue,String andOr);
	
	//like
	
	/**
	 * 数据库中的字段必须为字符串类型
	 * 例key like 'value'
	 * @param key
	 * @param value
	 * @return
	 */
	public String mergeLike(String key,String value);
	
	//select
	
	/**
	 * 组合成字符串select * from tableName
	 * @return
	 */
	public String select();
	
	/**
	 * 组合成 select value from tableName
	 * @param value
	 * @return
	 */
	public String select(String value);
	
	/**
	 * 根据一个字段和值查询所以字段的记录
	 * 注意：如果数据库中searchid字段为字符串类型，
	 * 则必须要在传入的searchValue加入单引号''
	 * @param searchId
	 * @param searchValue
	 * @return
	 */
	public String mergeSelect(String searchId, String searchValue);
	
	//delete
	
	/**
	 * 组合成字符串delete from tableName
	 * @return
	 */
	public String delete();
	
	
	/**
	 * 组合成key=value的删除语句
	 * 注意：searchValue在数据库中为字符串时，必须加''
	 * @param searchId
	 * @param searchValue
	 * @return
	 */
	public String mergeDelete(String searchId,String searchValue);
	
	/**
	 * 组合成and或or的多条件，删除语句 <br />
	 * 例account=user1,user2则组成为where account='user1' and account='user2' <br />
	 * 注意:searchId字段在数据库中必须为字符串类型
	 * 如果searchValue为null或者为空值，则将返回""
	 * @param searchId
	 * @param searchValue
	 * @param andOr
	 * @return
	 */
	public String mergeDelete(String searchId,String searchValue,
			String andOr);
	
	/**
	 * 组合成DELETE语句，条件为 WHERE searchId IN ( searchValue )。
	 * 注意：searchValue在数据库中为字符串时，必须加''
	 * 如果searchValue为null或者为空值，则将返回""。
	 * @param searchId 
	 * @param searchValue 1,2,3
	 * @return
	 */
	public String mergeDeleteIN(String searchId,String searchValue);
	
	/**
	 * 组合成 update tableName 
	 * @return
	 */
	public String update();
	
	/**
	 * 组合成单条件的更新字符串
	 * 注意：updateField和value如果在数据库中的字段类型为string必须要加''
	 * @param updateField
	 * @param updateValue
	 * @param key
	 * @param value
	 * @return
	 */
	public String mergeUpdate(String updateField,String updateValue,
			String searchId,String searchValue);
	
	/**
	 * 组合成多条件的更新字符串 <br />
	 * 例value=user1,user2... <br />
	 * 则where子句为 key='user1' andOr key='user2' <br />
	 * 注意：updateField如果在数据库中的字段类型为string必须要加''<br />
	 * 当searchValue为null或者为空值时返回""
	 * @param updateField
	 * @param updateValue
	 * @param key
	 * @param value
	 * @param andOr
	 * @return
	 */
	public String mergeUpdate(String updateField,String updateValue,
			String searchId,String searchValue,String andOr);
	
	/**
	 * 
	 * @param sql
	 * @param between
	 * @param orderByColumn 需要排序的列
	 * @return
	 */
	public String mergeBetween(String sql,String between, String orderByColumn);
	
}
